package indi.wrenn.studentsystem.frame;

import indi.wrenn.studentsystem.dao.ManageHelper;
import indi.wrenn.studentsystem.model.ScoreAnalyzeModel;
import indi.wrenn.studentsystem.model.ScoreModel;
import indi.wrenn.studentsystem.model.StudentModel;
import indi.wrenn.studentsystem.util.CreateSql;
import indi.wrenn.studentsystem.util.WindowUtil;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;

/**
 * 成绩条件查询对话框
 * 用于根据多种条件查询学生成绩信息
 */
public class ScoreConditionsQueryFrame extends JDialog{
	// 界面组件定义
	private JLabel student_ID;          // "学号"标签
	private JLabel student_Name;        // "姓名"标签
	private JLabel sex_Label;           // "性别"标签
	private JLabel classe_Label;        // "班级"标签
	private JLabel grade_Label;         // "年级"标签
	private JLabel major_Label;         // "专业"标签
	private JLabel department_Label;    // "所属院系"标签

	private JTextField student_IDText;  // "学号"文本框
	private JTextField student_NameText; // "姓名"文本框
	private JTextField sex_Text;        // "性别"文本框
	private JTextField grade_Text;      // "年级"文本框
	private JTextField department_Text; // "院系"文本框
	private JTextField major_Text;      // "专业"文本框
	private JTextField classe_Text;     // "班级"文本框

	private JButton conditions_button;  // "条件成绩查询"按钮
	private ManageHelper helper;        // 数据库操作辅助类
	private JDialog jd;                 // 当前窗口引用

	/**
	 * 构造函数
	 * @param owner 父窗口
	 * @param title 对话框标题
	 * @param modal 是否为模态对话框
	 * @param jt 需要更新数据的表格
	 * @param department 院系名称
	 * @param major 专业名称
	 * @param grade 年级
	 */
	public ScoreConditionsQueryFrame(JDialog owner, String title, boolean modal, JTable jt, String department, String major, String grade){
		super(owner, title, modal);
		this.jd = this;
		this.setLayout(null);  // 设置为绝对布局

		// 初始化学号标签和文本框
		student_ID = new JLabel("学号:");
		student_ID.setBounds(29, 19, 30, 20);
		this.add(student_ID);

		student_IDText = new JTextField();
		student_IDText.setBounds(65, 19, 100, 20);
		this.add(student_IDText);

		// 初始化姓名标签和文本框
		student_Name = new JLabel("姓名:");
		student_Name.setBounds(200, 19, 30, 20);
		this.add(student_Name);

		student_NameText = new JTextField();
		student_NameText.setBounds(240, 19, 100, 20);
		this.add(student_NameText);

		// 初始化性别标签和文本框
		sex_Label = new JLabel("性别:");
		sex_Label.setBounds(29, 50, 30, 20);
		this.add(sex_Label);

		sex_Text = new JTextField();
		sex_Text.setBounds(65, 50, 100, 20);
		this.add(sex_Text);

		// 初始化年级标签和文本框（只读）
		grade_Label = new JLabel("年级:");
		grade_Label.setBounds(200, 50, 30, 20);
		this.add(grade_Label);

		grade_Text = new JTextField();
		grade_Text.setBounds(240, 50, 100, 20);
		grade_Text.setText(grade);           // 设置年级文本
		grade_Text.setEditable(false);       // 设置为不可编辑
		this.add(grade_Text);

		// 初始化院系标签和文本框（只读）
		department_Label = new JLabel("院系:");
		department_Label.setBounds(29, 83, 30, 20);
		this.add(department_Label);

		department_Text = new JTextField();
		department_Text.setBounds(65, 83, 100, 20);
		department_Text.setText(department); // 设置院系文本
		department_Text.setEditable(false);  // 设置为不可编辑
		this.add(department_Text);

		// 初始化专业标签和文本框（只读）
		major_Label = new JLabel("专业:");
		major_Label.setBounds(200, 83, 30, 20);
		this.add(major_Label);

		major_Text = new JTextField();
		major_Text.setBounds(240, 83, 150, 20);
		major_Text.setText(major);           // 设置专业文本
		major_Text.setEditable(false);       // 设置为不可编辑
		this.add(major_Text);

		// 初始化班级标签和文本框
		classe_Label = new JLabel("班级:");
		classe_Label.setBounds(29,116, 30, 20);
		this.add(classe_Label);

		classe_Text = new JTextField();
		classe_Text.setBounds(65, 116, 100, 20);
		this.add(classe_Text);

		// 初始化条件查询按钮
		conditions_button = new JButton("条件成绩查询");
		conditions_button.setBounds(230, 130, 100, 30);

		// 为条件查询按钮添加事件监听器
		conditions_button.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// 获取用户输入的所有条件
				String id = student_IDText.getText().trim();        // 学号
				String name = student_NameText.getText().trim();    // 姓名
				String sex = sex_Text.getText().trim();             // 性别
				String grade = grade_Text.getText().trim();         // 年级
				String department = department_Text.getText().trim(); // 院系
				String major = major_Text.getText().trim();         // 专业
				String classe = classe_Text.getText().trim();       // 班级

				// 验证是否至少输入了一个查询条件
				if(id.equals("") && name.equals("") && sex.equals("") &&
						grade.equals("") && department.equals("") &&
						major.equals("") && classe.equals("")){
					// 所有条件都为空，显示警告信息
					JOptionPane.showMessageDialog(jd, "查询条件不能为空", "", JOptionPane.WARNING_MESSAGE);
					return;
				} else {
					// 根据条件生成SQL查询语句
					String sql = CreateSql.getConditions_Sql(id, name, sex, grade, department, major, classe);
					// 创建成绩数据模型
					ScoreModel sm = new ScoreModel(sql, major, grade, jd);
					// 更新表格数据模型
					jt.setModel(sm);
					// 关闭当前对话框
					jd.dispose();
				}
			}
		});
		this.add(conditions_button);

		// 设置窗口属性
		this.setSize(411, 222);           // 设置窗口大小
		this.setResizable(false);         // 设置窗口不可调整大小
		WindowUtil.setFrameCenter(this);  // 设置窗口居中显示
		this.setVisible(true);            // 显示窗口
	}
}